//go:build wireinject
// +build wireinject

package di

import (
	"algo-sdk-go/project/matchmaking/adapter/cache"
	"algo-sdk-go/project/matchmaking/application/service"
	"algo-sdk-go/project/matchmaking/domain/port/repo"
	domainService "algo-sdk-go/project/matchmaking/domain/service"
	"algo-sdk-go/project/matchmaking/matchMaking-api/config"
	"algo-sdk-go/project/matchmaking/matchMaking-api/internal/svc"

	"github.com/google/wire"
)

func BuildSvc() (svcCtx *svc.ServiceContext) {
	wire.Build(
		config.NewConfig,
		svc.NewServiceContext,
		cache.NewMatchMakingCache,

		repo.MatePreferenceRepoSet,
		repo.UserProfileRepoSet,
		repo.UnverifiedUserProfileRepoSet,
		repo.RecommendUserRepoSet,

		service.NewUserProfileService,
		service.NewUnverifiedUserProfileService,
		service.NewMatePreferenceService,
		service.NewMatchService,
		service.NewCommonService,
		service.NewLoginService,

		domainService.NewMatchMakingDomain,
	)
	return new(svc.ServiceContext)
}
